﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Content;

namespace FrogEngine
{
	public interface IEngine
	{
		GameWindow Window { get; }
		GraphicsDevice GraphicsDevice { get; }
		SpriteBatch SpriteBatch { get; }
		ContentManager ContentManager { get; }

		ISet<IGameEntity> Entities { get; }
		ISet<IGameEntityService> EntityServices { get; }

		T GetService<T>() where T : IGameEntityService;
		IEnumerable<T> GetServices<T>() where T : IGameEntityService;

		void Initialize();
		void Cleanup();
		void Update(GameTime gameTime);
		void Render(GameTime gameTime);
		void Exit();
	}
}
